SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[spEjecutarMovimientoDeReubicacion]
@idMovimiento Int
AS
SET NOCOUNT ON
SET DATEFORMAT DMY

If Exists(Select * From tb_MovimientosDeReubicacion Where idMovimientoDeReubicacion = @idMovimiento And Ejecutado = 'S')
	RETURN

Begin Transaction

Declare @FechaAlta Datetime, @FechaBaja Datetime, @IDS Int, @IDSS Int, @Servicio Int, @SubServicio Int, @Fecha Datetime, 
	@PlazaOrigen Int, @PlazaDestino Int, @Error Int, @MensajeError Varchar(100), @ErrorC Int

Select @Servicio = Servicio, @SubServicio = idSubServicio, @Fecha = Fecha, @PlazaOrigen = PlazaOrigen, @PlazaDestino = PlazaDestino
	From tb_MovimientosDeReubicacion Where idMovimientoDeReubicacion = @idMovimiento

Declare @FechaB Datetime

Select @FechaAlta = FechaAlta, @FechaBaja = FechaBaja, @IDS = ServicioAgente From tb_SubServiciosAgentes Where idSubServicio = @SubServicio

Select @FechaB = Dateadd(Day, -1, @FechaAlta)

Select @ErrorC = 0

Print 'Fecha alta SS: ' + Convert(Varchar, @FechaaLta) + ' Fecha de comparacion ' + Convert(Varchar, @Fecha)

If @Fecha = @FechaAlta
Begin
	Print 'Fecha = FechaAlta'

	Update tb_SubServiciosAgentes Set Plaza = @PlazaDestino Where idSubServicio = @SubServicio
	Select @ErrorC = @@Error
	If @ErrorC <> 0 GOTO SALIR

	Update tb_SubServiciosAgentes Set Plaza = @PlazaDestino Where ServicioAgente = @IDS And FechaAlta > @Fecha
	Select @ErrorC = @@Error
	If @ErrorC <> 0 GOTO SALIR
End

If @Fecha > @FechaAlta And @FechaBaja Is Null -- Si la reubicacion es posterior al subservicio. ----|-----|----- ACA ------
Begin
	Print 'Fecha > FechaAlta And FechaBaja Is Null'	Update tb_SubServiciosAgentes Set FechaBaja = Convert(Varchar, Day(dateadd(day, -1, @Fecha)))+'/'+Convert(Varchar, Month(Dateadd(day,-1,@Fecha)))+'/'+Convert(Varchar, Year(Dateadd(Day,-1,@Fecha))), Baja = 'S' Where idSubServicio = @SubServicio

	Select @ErrorC = @@Error
	If @ErrorC <> 0 GOTO SALIR

	Insert tb_SubServiciosAgentes
	Select ServicioAgente, nroOrden9+1, Convert(Varchar, Day(@Fecha))+'/'+Convert(Varchar, Month(@Fecha))+'/'+Convert(Varchar, Year(@Fecha)), 'N', null, null, movimiento, null, null, null, null, 
	@PlazaDestino, SituacionLaboral, SituacionExtraordinaria, nivel, modalidad, zona, licencia, CodEnfermedad, null, null, null, estadoliqext, null, null, null, null, null, null, null, null, null
	From tb_SubServiciosAgentes Where idSubServicio = @SubServicio

	Select @ErrorC = @@Error
	If @ErrorC <> 0 GOTO SALIR
End	


If @Fecha > @FechaAlta And @Fecha < @FechaBaja And @FechaBaja Is Not Null-- Si la reubicacion esta entre el subservicio. ---|---- ACA ----|  ó ---|---- ACA -----|----- 
Begin
	Print 'FEcha > FEchaAlta And Fecha < FEchaBaja'
	Update tb_SubServiciosAgentes Set FechaBaja = Convert(Varchar, Day(@FechaB)) + '/' + Convert(Varchar, Month(@FechaB)) + '/' + Convert(Varchar, Year(@FechaB)), Baja = 'S' Where idSubServicio = @SubServicio

	Select @ErrorC = @@Error
	If @ErrorC <> 0 GOTO SALIR

	Insert tb_SubServiciosAgentes
	Select ServicioAgente, nroOrden9+1, Convert(Varchar, Day(@Fecha))+'/'+Convert(Varchar, Month(@Fecha))+'/'+Convert(Varchar, Year(@Fecha)), 'S', @FechaBaja, null, movimiento, null, null, null, null, 
	@PlazaDestino, SituacionLaboral, SituacionExtraordinaria, nivel, modalidad, zona, licencia, CodEnfermedad, null, null, null, estadoliqext, null, null, null, null, null, null, null, null, null
	From tb_SubServiciosAgentes Where idSubServicio = @SubServicio

	Select @ErrorC = @@Error
	If @ErrorC <> 0 GOTO SALIR

	Update tb_SubServiciosAgentes Set Plaza = @PlazaDestino Where FechaAlta > @FechaBaja And ServicioAgente = @IDS

	Select @ErrorC = @@Error
	If @ErrorC <> 0 GOTO SALIR
End


If @Fecha = @FechaBaja
Begin
	Print 'Fecha = FechaBaja'
	Update tb_SubServiciosAgentes Set Plaza = @PlazaDestino Where FechaAlta > @FechaBaja And ServicioAgente = @IDS

	Select @ErrorC = @@Error
	If @ErrorC <> 0 GOTO SALIR
End


If @Fecha < @FechaAlta -- Si la reubicacion es anterior al subservicio.	--- ACA ----|------- 
Begin
	Print 'Fecha < FechaAlta'
	Print 'Fecha de reubicacion: '+ Convert(Varchar, @Fecha) + ' Fecha de SS: ' +  Convert(Varchar, @FechaAlta) 
	Select @IDSS = idSubServicio From tb_SubServiciosAgentes Where ServicioAgente = @IDS And @Fecha >= FechaAlta And @Fecha <= FechaBaja
	Print 'IDS: ' + Convert(Varchar, @IDS)
	Print 'IDSS: ' + Convert(Varchar, @IDSS)

	Select @FechaAlta = FechaAlta, @FechaBaja = FechaBaja From tb_SubServiciosAgentes Where idSubServicio = @IDSS

	If @Fecha < @FechaBaja
	Begin
		Update tb_SubServiciosAgentes Set FechaBaja = Convert(Varchar, Day(dateadd(day, -1, @Fecha)))+'/'+Convert(Varchar, Month(Dateadd(day,-1,@Fecha)))+'/'+Convert(Varchar, Year(Dateadd(Day,-1,@Fecha))), Baja = 'S' Where idSubServicio = @IDSS

		Select @ErrorC = @@Error
		If @ErrorC <> 0 GOTO SALIR

		Insert tb_SubServiciosAgentes
		Select ServicioAgente, nroOrden9+1, Convert(Varchar, Day(@Fecha)) + '/' + Convert(Varchar, Month(@Fecha)) + '/' + Convert(Varchar, Year(@Fecha)), 'S', @FechaBaja, null, movimiento, null, null, null, null, 
		@PlazaDestino, SituacionLaboral, SituacionExtraordinaria, nivel, modalidad, zona, licencia, CodEnfermedad, null, null, null, estadoliqext, null, null, null, null, null, null, null, null, null
		From tb_SubServiciosAgentes Where idSubServicio = @IDSS

		Select @ErrorC = @@Error
		If @ErrorC <> 0 GOTO SALIR

		Update tb_SubServiciosAgentes Set Plaza = @PlazaDestino Where FechaAlta > @FechaBaja And ServicioAgente = @IDS

		Select @ErrorC = @@Error
		If @ErrorC <> 0 GOTO SALIR
	End
End

Update tb_MovimientosDeReubicacion Set Ejecutado = 'S' Where idMovimientoDeReubicacion = @idMovimiento

SALIR:
If @ErrorC = 0
Begin
	Commit Transaction
End
Else
Begin
	Rollback Transaction
End
GO
